<?php

namespace app\api\controller;

use think\Controller;
use think\Request;

use app\api\model\Appdevice as deviceModel; //设备信息model
use think\Validate;

use app\api\model\appmanager as appModel; //应用的信息



class AppDevice extends BaseApi
{

    // 可以用


    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {

        //
        //添加数据
        // $students = input();

        $params = input();

        $rules  = [
            'device_uuid' => 'require',
            'app_name' => 'require',
            'app_bundle_id' => 'require',
        ];
        $val = new Validate($rules);
        $flag = $val->check($params);
        if (!$flag) {
            $error = $val->getError();
            $this->fail($error);
        }
        // $res = $model->allowField(true)
        //     ->where('device_uuid', $params['device_uuid'])
        //     ->where('app_name', $params['app_name'])
        //     ->where('app_bundle_id', $params['app_bundle_id'])
        //     ->select();
        // if (!$res) {
        //     //未注册
        //     $this->fail('未查询到该设备注册信息');
        // }
        //查询该bundle id 的注册时间
        $app_bundle_id  =  $params['app_bundle_id'];
        $app_name =  $params['app_name'];

        $modelApp = new appModel();
        //请空一下数据库
        $res = $modelApp
            ->allowField(true)
            ->where('app_bundle_id', $app_bundle_id)
            ->where('app_name', $app_name)
            ->field('start_time,end_time,app_bundle_id,id,device_count,register_count,mark')
            ->order('id asc')
            ->select();

        // $this->ok($res);
        if (count($res) == 0) {
            $msg = '服务升级中，请联系管理员或稍后再试！';
            $this->fail($msg);
        }

        //判断是否过期
        $nowModel = $res[0];
        // $this->ok($nowModel);

        $nowtime = time();
        $starttime = $nowModel['start_time'];
        $endtime = $nowModel["end_time"];
        if ($nowtime < $starttime || $nowtime > $endtime) {
            //不在有效期内
            //查询备注的信息 提示给用户
            $msg = '不在有效期，请联系管理员';
            $mark = $nowModel['mark'];
            if (!is_null($mark)) {
                $msg  = $mark;
                $this->fail($msg);
            }
            $this->fail($msg);
            die;
        }
        // 在有效期内 判断设备数量是否已经注册超标
        $maxcount = $nowModel['device_count'];
        $hascount = $nowModel['register_count'];

        if ($hascount > $maxcount) {
            $this->fail('设备已经超量，请联系管理员');
            die;
        }

        // 没有超量  自动注册该设备
        $this->autoRisrerDevice($params);

        // $this->ok($res);
    }

    public function autoRisrerDevice($params)
    {
        # code...
        //  添加该设备到数据库
        $model = new deviceModel();
        //查询注册表中注册的数量 看是否可以添加
        $regDev = $model->field('app_bundle_id')->where('app_bundle_id', $params['app_bundle_id'])->select();

        $count = count($regDev);



        // 更新数据表中注册的设备数
        $appmodel = new appModel();
        $dataRegister =  $appmodel->where('app_bundle_id', $params['app_bundle_id'])->select();

        // 插入数据
        $onedata = $dataRegister[0];

        // $res =  $appmodel->allowField(true)->update(['register_count' => $count], ['id' => $onedata['id']], true);

        //查看当前数值是否可以继续添加
        $maxcount = $onedata['device_count'];
        $hascount = $count;

        if ($hascount > $maxcount) {
            //已京到了最大数值 不能再添加了
            $this->fail('已经到了最大设备数，请联系管理员处理！');
        }


        // 查询当前的uuid bundle id appname 三个是否同时存在
        $resNow = $model->allowField(true)
            ->where('device_uuid', $params['device_uuid'])
            ->where('app_name', $params['app_name'])
            ->where('app_bundle_id', $params['app_bundle_id'])
            ->select();

        $nowtime = time();

        if (count($resNow) != 0) {
            // 更新本地的数据
            //添加成功 无需再往数据库添加
            $saveid = $resNow[0]['id'];

            // $this->ok($saveid);

            $res = $model->where('id', $saveid)->update(['nowtime' => $nowtime]);
            $this->ok([], 1000, '重复添加');
        }

        //保存当前的数据
        $data = $params;
        $data['nowtime'] = $nowtime;
        $res = $model->allowField(true)->save($data);

        if ($res == 1) {
            $this->ok([], 1000, '添加成功');
        } else {
            $this->fail("添加失败");
        }
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //添加数据
        $params = input();
        $model = new deviceModel();
        //验证数据
        // $time = date('Y-m-d H:i:s');
        $time = time();
        $params['nowtime'] = $time;

        $rules  = [
            'device_uuid' => 'require',
            'app_name' => 'require',
            'app_bundle_id' => 'require',
        ];
        $val = new Validate($rules);
        $flag = $val->check($params);

        if (!$flag) {
            $this->fail('参数有误，请核对');
        }
        // 查询当前的uuid bundle id appname 三个是否同时存在
        $resNow = $model->allowField(true)
            ->where('device_uuid', $params['device_uuid'])
            ->where('app_name', $params['app_name'])
            ->where('app_bundle_id', $params['app_bundle_id'])
            ->select();
        // $this->ok(44);


        //查询注册表中注册的数量
        $regDev = $model->field('app_bundle_id')->where('app_bundle_id', $params['app_bundle_id'])->select();
        $count = count($regDev);

        // 更新数据表中注册的设备数
        $appmodel = new appModel();
        $dataRegister =  $appmodel->where('app_bundle_id', $params['app_bundle_id'])->select();
        // 插入数量
        $onedata = $dataRegister[0];

        $res =  $appmodel->allowField(true)->update(['register_count' => $count], ['id' => $onedata['id']], true);
        // return $res;

        //查看当前数值是否可以继续添加
        $maxcount = $onedata['device_count'];
        $hascount = $res['register_count'];

        if ($hascount > $maxcount) {
            //已京到了最大数值 不能再添加了
            $this->fail('已经到了最大设备数，请联系管理员添加！');
        }


        if (count($resNow) != 0) {
            // 更新本地的数据
            //添加成功 无需再往数据库添加
            $this->ok('重复添加');
        }

        //保存当前的数据
        $data = $params;
        $res = $model->allowField(true)->save($data);

        if ($res == 1) {
            $this->ok([], 1000, '添加成功');
        } else {
            $this->fail("添加失败");
        }
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read()
    {
        //
        $params = input();
        $rules  = [
            'app_name' => 'require',
            'app_bundle_id' => 'require',
        ];
        $val = new Validate($rules);
        $flag = $val->check($params);

        if (!$flag) {
            $this->fail('参数有误，请核对');
        }

        $model = new deviceModel();
        $res = $model->allowField(true)
        ->where(['app_name'=>$params['app_name'],'app_bundle_id'=>$params['app_bundle_id']])->order('nowtime desc')
        ->select();

        $this->ok($res);
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}
